package org.syntaxlisp.core.element;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author HuangYijun
 * @data 2023-01-29 11:08
 **/
public class ListExpressionElement extends SyntaxLispElement {

    public ListExpressionElement(SyntaxLispElementType type, List<SyntaxLispElement> subElements) {
        super(type, null);
        this.subElements = subElements;
    }

    @Override
    public SyntaxLispElement copy() {
        List<SyntaxLispElement> nwSubs = subElements.stream()
                                                    .map(SyntaxLispElement::copy)
                                                    .collect(Collectors.toList());
        return (new ListExpressionElement(getType(), nwSubs)).copyMatchPropertiesAndReturn(this);
    }

    @Override
    public boolean equalsTo(SyntaxLispElement o) {
        return getSubElements().equals(o.getSubElements());
    }
}
